package com.zh.netty.nio;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 案例03
 * 使用FileChannel(通道)和方法read,write, 完成文件的拷贝
 * 拷贝一个文本文件1.txt,放在项目下
 */
public class NIOFileChannel03 {

    public static void main(String[] args) throws IOException {

        // 创建文件输入流
        FileInputStream inputStream = new FileInputStream("d:\\file01.txt");
        FileChannel fileChannel01 = inputStream.getChannel();

        // 创建文件输出流
        FileOutputStream fileOutputStream = new FileOutputStream("d:\\file02.txt");
        FileChannel fileChannel02 = fileOutputStream.getChannel();

        // 创建一个byteBuffer
        ByteBuffer byteBuffer = ByteBuffer.allocate(512);

        while (true){ // 循环读取
            // 需要先将 标志位复位
            byteBuffer.clear();
            int read = fileChannel01.read(byteBuffer);
            if(read == -1){  // 表示读取结束
                break;
            }else{
                // 将buffer中的数据写入到fileChannel02
                // 先将byteBuffer 进行反转
                byteBuffer.flip();
                fileChannel02.write(byteBuffer);
            }
        }

        // 关闭流
        fileChannel01.close();
        fileChannel02.close();

    }
}












